#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;

const int N = 15;

int n;
int arr[N];
bool now[N];
int ret;

void dfs(int pos) {
    if (pos == n + 1) {
        ret++;
        return;
    }

    for (int i = 1; i <= n; i++) {
        if (now[i]) continue;
        if (now[arr[i]]) return;
        now[i] = true;
        dfs(pos + 1);
        now[i] = false;
    }
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> arr[i];
    dfs(1);
    cout << ret << endl;
    return 0;
}

//#include <any>
//#include <iostream>
//#include <string>
//
//using namespace std;
//
//int q;
//string s;
//int main()
//{
//    cin >> q;
//    while (q--)
//    {
//        cin >> s;
//        for (int i = s.size() - 1; i >= 0; i--)
//        {
//            if ((s[i] - '0') % 2 == 0)
//            {
//                swap(s[i], s[s.size() - 1]);
//                break;
//            }
//        }
//        if ((s[s.size() - 1] - '0') % 2 == 0)
//            cout << s << endl;
//        else cout << -1 << endl;
//
//    }
//    return 0;
//}